﻿// ----------------------------------------------------------------------------------------
// Author:                    Joaquín López y Magally Vargas
// Company:                   Albalia Interactiva S.L
// Assembly version:          1.0.0.0
// Date:                      10/02/2009
// Time:                      12:15
// Solution Name:             FacturaeAdd-in
// Solution Filename:         FacturaeAdd-in.sln
// Solution FullFilename:     C:\Ribbon_Facturae\FacturaeAdd-in.sln
// Project Name:              FacturaeAdd-in
// Project Filename:          FacturaeAdd-in.csproj
// Project FullFilename:      C:\Ribbon_Facturae\FacturaeAdd-in\FacturaeAdd-in.csproj
// Project Item Name:         XmlFile.cs
// Project Item Filename:     XmlFile.cs
// Project Item FullFilename: C:\Ribbon_Facturae\FacturaeAdd-in\XmlFile.cs
// Project Item Kind:         Código
// Purpose:                   Serializar y deserializar objetos
//Copyright © 2008 - 2009 Albalia Interactiva S.L. Reservados todos los derechos.
// ----------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.IO;
using System.Xml;

namespace FacturaeAdd_in
{
    /// <summary>
    /// Clase estática que serializa y deserializa objetos
    /// </summary>
    public static class XmlFile
    {
        #region "Public Methods"

        /// <summary>
        /// Método estático que inicializa las propiedados de un objeto a partir de un documento XML.
        /// Realiaza una deserialización entre un objeto y un XML. Si el archivo XML no existe,
        /// se crea con los datos por defecto
        /// </summary>
        /// <param name="obj">Objeto que se va a serializar o deserializar</param>
        /// <param name="path">Ruta del archivo XML</param>
        /// <returns></returns>
        public static bool LoadObjectFrom(ref ConfigData obj, string path)
        {
            XmlSerializer xmlS=null;
            StreamReader read=null;
            try
            {
                xmlS = new XmlSerializer(typeof(ConfigData));
                read = new StreamReader(path);
                obj = ((ConfigData)xmlS.Deserialize(read));
                read.Close();
                return true;
            }
            catch (FileNotFoundException)
            {
                return false;
            }
            catch (DirectoryNotFoundException)
            {
                return false;
            }
            catch (InvalidOperationException)
            {
                read.Close();
                return false;
            }
        }

        /// <summary>
        /// Metodo estático que serializa un objeto.Guarda en un archivo XML los valores de sus propiedades.
        /// </summary>
        /// <param name="obj">Objeto que vamos a serializar y por tanto almacenar el valor de sus propiedades en un XML.</param>
        /// <param name="path">Ruta completa, con el nombre del archivo donde se van a guardar los datos.</param>
        /// <param name="tipo">Tipo de objeto que se va a serializar.</param>
        /// <returns>Devuelve true o false dependiendo de si la serializaciñon ha sido correcta o no.</returns>
        public static bool Save(Object obj, string path, Type tipo)
        {
            XmlSerializer xmlS=null;
            StreamWriter write=null;
            try
            {
                xmlS = new XmlSerializer(tipo);
                write = new StreamWriter(path);
                xmlS.Serialize(write, obj);
                write.Close();
                return true;
            }
            catch (Exception)
            {
                write.Close();
                return false;
            }

        }

        #endregion
    }
}

